package cn.com.blueInfo.bpm.person.entity;

import cn.com.blueInfo.bpm.common.entity.BaseEntity;
import cn.com.blueInfo.bpm.person.enums.UserAccountMfaStatus;
import cn.com.blueInfo.bpm.person.enums.UserAccountStatus;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 员工账户表
 * @author suxch
 * @since 2025-08-24 01:39:52
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "mc_osm_user_account", autoResultMap = true)
@Schema(description = "员工账户表")
public class UserAccount extends BaseEntity {

    /** ID */
    @TableId(type = IdType.INPUT)
    @Schema(description = "ID")
    private Long id;
    /** 用户基本信息ID */
    @Schema(description = "用户基本信息ID")
    private Long userBaseId;
    /** 登录名 */
    @Schema(description = "登录名")
    private String loginName;
    /** 登录用手机号 */
    @Schema(description = "登录用手机号")
    private String loginMobile;
    /** 登录用邮箱 */
    @Schema(description = "登录用邮箱")
    private String loginEmail;
    /** 登录密码（密文） */
    @Schema(description = "登录密码（密文）")
    private String password;
    /** 密码过期时间（90天后提醒） */
    @Schema(description = "密码过期时间（90天后提醒）")
    private LocalDateTime passwordExpireTime;
    /** 帐号状态：0-禁用，1-正常，2-锁定 */
    @Schema(description = "帐号状态：0-禁用，1-正常，2-锁定")
    private UserAccountStatus accountStatus;
    /** 帐号锁定原因 */
    @Schema(description = "帐号锁定原因")
    private String lockReason;
    /** 最后登录时间 */
    @Schema(description = "最后登录时间")
    private LocalDateTime lastLoginTime;
    /** 最后登录IP，为兼容IPV6，长度39 */
    @Schema(description = "最后登录IP，为兼容IPV6，长度39")
    private String lastLoginIp;
    /** 连续登录失败次数 */
    @Schema(description = "连续登录失败次数")
    private Byte loginFailCount;
    /** 最后登录失败时间 */
    @Schema(description = "最后登录失败时间")
    private LocalDateTime loginFailTime;
    /** 多因素认证状态：0-未开启，1-已开启 */
    @Schema(description = "多因素认证状态：0-未开启，1-已开启")
    private UserAccountMfaStatus mfaStatus;
    /** 多因素认证密钥 */
    @Schema(description = "多因素认证密钥")
    private String mfaSecret;
    /** 账号有效期 */
    @Schema(description = "账号有效期")
    private LocalDateTime accountExpireTime;
    /** 登录设备 */
    @Schema(description = "登录设备")
    private String loginChannel;

}
